/********************************************************
 * Filename: TUnitLog.java
 * Author: LMU
 * Program: TUnit
 * Description: Creates a logger for the TUnit plugin.        
 * Revision History:
 * 20060905: Initial Revision.
 * *****************************************************/

package edu.lmu.cs.tUnit.log;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

import edu.lmu.cs.tUnit.plugin.TUnitPlugin;

/**
 * The logger of convenience for the TUnit plug-in.
 */
public class TUnitLog {
	/**
	 * Log the specified information.
	 * 
	 * @param message, a human-readable message, localized to the
	 *           current locale.
	 */
	public static void logInfo(String message) {
		log(IStatus.INFO, IStatus.OK, message, null);
	}

	/**
	 * Log the specified error.
	 * 
	 * @param exception, a low-level exception.
	 */
	public static void logError(Throwable exception) {
		logError("Unexpected Exception", exception);
	}

	/**
	 * Log the specified error.
	 * 
	 * @param message, a human-readable message, localized to the
	 *           current locale.
	 * @param exception, a low-level exception, or <code>null</code>
	 *           if not applicable.
	 */
	public static void logError(String message, Throwable exception) {
		log(IStatus.ERROR, IStatus.OK, message, exception);
	}

	/**
	 * Log the specified information.
	 * 
	 * @param severity, the severity; one of the following:
	 *           <code>IStatus.OK</code>,
	 *           <code>IStatus.ERROR</code>,
	 *           <code>IStatus.INFO</code>, or
	 *           <code>IStatus.WARNING</code>.
	 * @param pluginId. the unique identifier of the relevant
	 *           plug-in.
	 * @param code, the plug-in-specific status code, or
	 *           <code>OK</code>.
	 * @param message, a human-readable message, localized to the
	 *           current locale.
	 * @param exception, a low-level exception, or <code>null</code>
	 *           if not applicable.
	 */
	public static void log(int severity, int code, String message, Throwable exception) {
		log(createStatus(severity, code, message, exception));
	}

	/**
	 * Create a status object representing the specified information.
	 * 
	 * @param severity, the severity; one of the following:
	 *           <code>IStatus.OK</code>,
	 *           <code>IStatus.ERROR</code>,
	 *           <code>IStatus.INFO</code>, or
	 *           <code>IStatus.WARNING</code>.
	 * @param pluginId, the unique identifier of the relevant
	 *           plug-in.
	 * @param code, the plug-in-specific status code, or
	 *           <code>OK</code>.
	 * @param message, a human-readable message, localized to the
	 *           current locale.
	 * @param exception, a low-level exception, or <code>null</code>
	 *           if not applicable.
	 * @return, the status object (not <code>null</code>).
	 */
	public static IStatus createStatus(int severity, int code, String message, Throwable exception) {
		return new Status(severity, TUnitPlugin.ID, code, message, exception);
	}

	/**
	 * Log the given status.
	 * 
	 * @param status, the status to log.
	 */
	public static void log(IStatus status) {
		TUnitPlugin.getDefault().getLog().log(status);
	}
}